/***********************************************************************************
 * 文件名： cap_sensor.h
 * 版本： 3
 * 说明：
 * 		纯软件实现的电容传感器组件，可以看做是一个转换的模拟量是电容值的ADC，可以利用普通IO口
 * 	测量电容。转换的结果只是一个采样值，这个值对应的电容值需要与基准电容的采样值进行比较才能准
 * 	确算出电容值，这个需要使用者自行处理。
 * 		可用于电容触摸键的检测，这种场景无需计算准确的电容值，将采样值与一个固定值进行比较即可
 * 	判断按键是否被触摸。
 * 		典型的应用电路见说明文档。采样时处于死等状态，属于耗时操作。
 *      在文件 cap_sensor_config.h 进行正确的配置。
 * 修改记录：
 * 	2021/08/19: 初版。 刘言。
 *  2022/01/17：开关中断API可配置，更改中断开关位置便于示波器观察稳定的充电时间。
 *  2022/05/18: 去掉CPU过采样实现方案。占用优化，新增 _CAPSS_USE_ASYNC_API 配置项。
 ***********************************************************************************/
#ifndef _CAPSENSOR_H_
#define _CAPSENSOR_H_

#include "stddef.h"
#ifdef __NO_INCLUDE_PATH
#include "..\..\..\projects\prj\bsp\cap_sensor_config.h"
#else
#include "cap_sensor_config.h"
#endif
#include "..\..\polsys.h"



//==============================================================================
// 配置预处理
//==============================================================================
#if (_CAPSS_TIME_BITS == 32)
typedef u32 capss_value_t;
typedef u32 capss_time_t;
#elif (_CAPSS_TIME_BITS == 16)
typedef u16 capss_value_t;
typedef u16 capss_time_t;
#else
typedef u16 capss_value_t;
typedef u8 capss_time_t;
#endif

//==============================================================================
// API
//==============================================================================

void CapSS_Init();

// 设置通道、采样并返回对应通道的值
#if (_CAPSS_CH_NUM > 1)
capss_value_t CapSS_GetValue(u8 ch);
#else
capss_value_t CapSS_GetValue();
#endif

#ifdef _CAPSS_USE_ASYNC_API
// // 设置通道
// void CapSS_SetCH(u8 ch);

// // 对当前通道进行一次采样，采样结束后返回，通过 CapSS_GetLastResult 获取采样值。
// void CapSS_Sampling();

// 【异步】开始一次采样，完成后会调用事件回调。【未实现】
// void CapSS_StartOnce();

// 获取当前通道号
u8 CapSS_GetCH();

// 不采样，仅获取最后一次值
capss_value_t CapSS_GetLastResult();
#endif


#endif
